#include<signal.h>
#include<unistd.h>
#include<iostream>
#include<cstdlib>
#include<cstring>
using namespace std;

void PrintPending(){
    sigset_t set;
    sigpending(&set);
    
    for(int signo =1 ;signo<=31;signo++){
        if(sigismember(&set,signo))
            cout<<"1";
        else 
            cout<<"0";
    }
    cout<< "\n";
}

void handler(int signo){
    cout<<"catch signal is"<<signo<<endl;
    while(true){
        PrintPending();
        sleep(1);
    }
    return; 
}

int main(){
    struct sigaction act, oact;
    memset(&act,0,sizeof(act));
    memset(&oact,0,sizeof(act));

    sigemptyset(& act.sa_mask);
    sigaddset(&act.sa_mask,1); //这是一个信号集，act.sa_mask,处理该信号时（handler运行时），将屏蔽act.sa_mask信号集合中的函数
    sigaddset(&act.sa_mask,4);//
    
    act.sa_handler=handler;
    sigaction(2,&act,&oact);
    
    while(true){
        cout<<"I am a process: "<<getpid()<<endl;
        sleep(1);
    }
    return 0; 
}